package com.pureut.order.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.pureut.order.dto.CustomerSaleRankDto;
import com.pureut.order.dto.PurchaseOrderDto;
import com.pureut.order.dto.PurchaseOrderTraceDto;
import com.pureut.order.vo.OrderReviewVo;
import com.pureut.order.vo.PurchaseOrderVo;
import com.sale.common.mybatis.core.page.PageQuery;
import com.sale.common.mybatis.core.page.TableDataInfo;
import com.sale.order.api.vo.PurchaseOrderTraceVo;
import com.sale.order.api.vo.UpdatePurchaseOrderDataVo;

import java.util.List;
import java.util.Map;

/**
 * 采购订单service
 */
public interface PurchaseOrderService {

    /**
     * 采购订单列表
     */
    TableDataInfo<Map<String,Object>> getList(PurchaseOrderVo purchaseOrderVo, PageQuery pageQuery);

    /**
     * 订单新增
     */
    boolean addOrder(Map<String,Object> map) throws Exception;

    /**
     * 新增（采购计划调用）
     */
    boolean planConfirmation(PurchaseOrderVo purchaseOrderVo) throws Exception;

    /**
     * 采购下单
     */
    boolean updateOrder(PurchaseOrderVo purchaseOrderVo);

    /**
     * 提交审核
     */
    boolean submitReview(Long id);

    /**
     * 撤销审核
     */
    boolean deleteReview(Long id);

    /**
     * 关结
     */
    boolean closeReview(PurchaseOrderVo purchaseOrderVo);

    /**
     * 查看
     */
    Map<String,Object> getViewById(Long id);

    /**
     * 采购入库
     */
    boolean batchArrival(PurchaseOrderDto purchaseOrderDto) throws Exception;

    /**
     * 修改
     */
    boolean updateOrderById(Map<String,Object> map) throws JsonProcessingException;

    /**
     * 审核单据
     */
    boolean purchaseOrderReview(OrderReviewVo orderReviewVo) throws Exception;

    /**
     * 修改采购订单数据（feign调用）
     */
    boolean updateOrderData(UpdatePurchaseOrderDataVo updatePurchaseOrderDataVo);

    /**
     * 修改采购订单数据（dubbo调用）扣减重量
     */
    boolean updateOrderDataSub(UpdatePurchaseOrderDataVo updatePurchaseOrderDataVo);

    /**
     * 修改采购订单退货重量（feign累加）
     * @param updatePurchaseOrderDataVo
     * @return
     */
    boolean updateSalesReturn(UpdatePurchaseOrderDataVo updatePurchaseOrderDataVo);

    /**
     * 修改采购订单退货重量（feign扣除）
     * @param updatePurchaseOrderDataVo
     * @return
     */
    boolean updateDeductSalesReturn(UpdatePurchaseOrderDataVo updatePurchaseOrderDataVo);

    /**
     * 获取审核过后的（待到货、部分到货）采购订单数据
     */
    TableDataInfo<PurchaseOrderDto> passList(PurchaseOrderVo purchaseOrderVo, PageQuery pageQuery);

    /**
     * 采购订单数(首页工作台使用)
     * @return
     */
    String getPurchaseOrderNum();

    /**
     *  采购订单金额（首页工作台使用）
     * @return
     */
    String getPurchaseOrderPrice();

    /**
     * 前五大供应商采购占比(元)
     * @return
     */
    List<CustomerSaleRankDto> supplierSaleRank();

    /**
     * 采购订单追踪列表
     * @param purchaseOrderTraceVo
     * @return
     */
    TableDataInfo<PurchaseOrderTraceDto> purchaseOrderTrace(PurchaseOrderTraceVo purchaseOrderTraceVo,PageQuery pageQuery);

    /**
     * 删除
     * @param ids
     * @return
     */
    int deleteDocument(String ids);
}
